System, method, and computer program product for resolving addressing in a network including a network address translator

ABSTRACT

A system, method, and computer program product through which address resolution is performed for nodes ( 101, 103 ) of a network that are behind a network address translator (NAT). A determination is made upon the initiation of a communication session as to whether one or more of the nodes ( 101, 103 ) included in the session are behind a NAT. Based on the determination, information is exchanged (L 102 , L 103 ) from an independent application server ( 105 ) to the nodes ( 101, 103 ) included in the session so as to resolve the addressing problems introduced by the NAT. The invention is applicable in applications including, but not limited to, IP telephony, and applications complying with the session initiation protocol (SIP).

CROSS-REFERENCE TO RELATED PATENT DOCUMENTS

This application is a divisional of U.S. application Ser. No.10/311,324, filed Dec. 30, 2002, which claims priority to PCT/US01/16512filed Jun. 29, 2001, which claims the benefit under 35 USC 119(e) ofU.S. Provisional Application. No. 60/215,872, entitled “INTENET MESSAGEUSING ADDRESS TRANSLATIONS,” filed Jun. 30, 2000, the entire contents ofthose applications are incorporated herein by reference.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates to Internet messaging. More particularly,the present invention relates to systems, methods, and computer programproducts for resolving addressing in networks that include a networkaddress translator.

2. Discussion of the Background

The transmission control protocol/Internet protocol (TCP/IP) suiteincludes four layers, a link layer, a network layer, a transport layer,and an application layer. A detailed explanation of the TCP/IP protocolsuite is provided in Stevens, W., “TCP/IP Illustrated, Vol. 1, TheProtocols,” Addison-Wesley Publishing Co., 15^(th) printing, October1999, ISBN: 0-201-63346-9, and Loshin, P., “TCP/IP Clearly Explained,”Morgan-Kaufmann, 3^(rd) Ed., 1999, ISBN: 0-12455826-7, the entirecontents of both of which are incorporated herein by reference.

The IP protocol is a network layer protocol for providing an unreliable,connectionless datagram delivery service. TCP and the user datagramprotocol (UDP) are transport layer protocols for providing a flow ofdata between two hosts in a TCP/IP network. TCP provides a reliableconnection-based flow of data between two hosts, while UDP provides asimpler, less reliable flow of data between two hosts.

TCP/IP is a packet-based protocol in which packets of information aretransported from node to node. Accordingly, each node in a TCP/IPnetwork must have an address that is unique within that network in orderto receive those packets that are sent to that node. The TCP, UDP, andIP protocols all include adding header information to packets ofinformation. These headers include the address information of both thesource node sending the packet, and the destination node which is theintended recipient of the packet. The IP header includes the source anddestination IP addresses, while the UDP header or TCP header include thesource and destination port numbers through which the packets are to becommunicated.

IP addresses are 32 bits. IP addresses are normally represented in“dotted decimal” format. For example, IP network addresses may berepresented as including the range of addresses from 0.0.0.0 to255.255.255.255.

The Internet is a TCP/IP-based network that includes many other TCP/IPnetworks. An overview of the Internet is provided in Gralla, P., “Howthe Internet Works,” Que, Millennium Ed., August 1999, ISBN:0-7897-2132-5, the entire contents of which is incorporated herein byreference. The phenomenal growth of the Internet has given rise to aconcern within the Internet community that the current TCP/IP protocolsuite will be unable to accommodate the number of nodes on the Internet.In other words, the 32-bit IP address provided in the TCP/IP protocolmay be insufficient. As a short-term solution, the idea of a networkaddress translator (NAT) has been developed by the Internet engineeringtaskforce (IETF). The IP NAT is described in RFC 1631, available throughthe IETF website (www.ietf.org). The entire contents RFC 1631 is hereinby reference. As described in RFC 1631, the IP NAT is placed at a borderbetween the Internet and another network. By using a NAT, an entirenetwork can share, for example, a single Internet address, through whichall external communications will be routed. The NAT simply maintains atranslation table that translates packets of information between theindividual nodes of the local network, and the common Internet addressof the network. By using a NAT, a single Internet address may be sharedby an entire network, thereby minimizing the address depletion problemconfronting the Internet.

One recognized limitation of a NAT is that the source address includedin the IP header of all packets originating from the NAT, and byextension, any of the nodes of the network behind the NAT, is the same.This limitation will impact those applications that rely on knowingtheir unique Internet address. While each node of the network behind theNAT has a unique IP address for that network, that IP address is notnecessarily a globally-unique Internet IP address. Only the IP addressof the NAT is guaranteed to be a globally unique IP address.

SUMMARY OF THE INVENTION

The inventors of the present invention have recognized that forInternet-based services, for example, IP telephony (also known asvoice-over-IP (VOIP)), text chat, and video chat, if one or more of thenodes of the session are behind a network address translator (NAT), thatfluid communications between two nodes becomes difficult, if notimpossible. Accordingly, one object of the present invention is toprovide a solution to this problem, as well as other problems anddeficiencies associated with address resolution in networks includingNATs.

The inventors of the present invention have further recognized that, forapplications such as IP telephony, routing media packets through aserver on the public network in order to perform network addresstranslation, is an unacceptable approach since an additional delay wouldbe introduced, which could result in an unacceptable voice delay or evenfragmented speech. Accordingly, a further object of the presentinvention is to provide a protocol through which nodes behind a NAT cancommunicate with time-critical information with other nodes, which maythemselves be behind a NAT.

The inventors of the present invention have further recognized that itwould be advantageous if an address resolution protocol was protocolindependent such that a client would need only distinguish addressresolution packets from media packets in order to take advantage of theaddress resolution protocol. Furthermore, the present inventorsrecognized that by performing third party address resolution, severaladvantages may be achieved. For example, if the third party retains theaddress resolution information, the third party will be able toefficiently manage a transfer of, for example, a voice-over-IP callwithout the need to re-invoke the address resolution protocol. Asecurity advantage to performing address resolution through a thirdparty, as recognized by the present inventors, is that it becomes moredifficult to “steal” a media session as compared to an approach wherethe clients simply send packets back to where they came from.

The above-described and other objects are addressed by the presentinvention, which includes a novel computer-based system, method, andcomputer program product through which address resolution is performedfor nodes that are behind a NAT. A determination is made upon theinitiation of a communication session as to whether one or more of thenodes included in the session are behind a NAT. Based on thedetermination, information is exchanged from an independent applicationserver to the nodes included in the session so as to resolve theaddressing problems introduced by the NAT. The invention is applicablein applications including, but not limited to, IP telephony, andapplications complying with the session initiation protocol (SIP).

Consistent with the title of this section, the above summary is notintended to be an exhaustive discussion of all the features orembodiments of the present invention. A more complete, although notnecessarily exhaustive, description of the features and embodiments ofthe invention is found in the section entitled “DESCRIPTION OF THEPREFERRED EMBODIMENTS.”

BRIEF DESCRIPTION OF THE DRAWINGS

A more complete appreciation of the invention and many of the attendantadvantages thereof will be readily obtained as the same becomes betterunderstood by reference to the following detailed description whenconsidered in connection with the accompanying drawings, wherein:

FIG. 1 is a block diagram illustrating a scenario in which neither ofthe clients involved in a session is behind a NAT;

FIG. 2 is a flow diagram of a process for determining whether a clientis behind a network address translator (NAT) according to one embodimentof the present invention;

FIG. 3 is a flow diagram of a process for determining an applicable casefor performing address resolution for a given session according to oneembodiment of the present invention;

FIG. 4 is a block diagram illustrating a scenario in which one of twonodes of a session is behind a NAT;

FIG. 5 is a flow diagram illustrating a process for performing addressresolution is performed in a scenario such as that illustrated in FIG. 4according to one embodiment of the present invention;

FIG. 6 is a block diagram illustrating a scenario in which each of theclients of a session are behind a different NAT;

FIGS. 7A-7C are a flow diagram illustrating a process through whichaddress resolution is performed in a scenario such as that illustratedin FIG. 6 according to one embodiment of the present invention;

FIG. 8 is a block diagram illustrating a scenario in which both nodes ofa session are behind the same NAT;

FIG. 9 is a flow diagram illustrating a process through which addressresolution is performed in a scenario such as that illustrated in FIG. 8according to one embodiment of the present invention;

FIG. 10 illustrates a calling sequence for performing address resolutionin a scenario such as that illustrated in FIG. 4 for an Internettelephony application according to one embodiment of the presentinvention;

FIG. 11 illustrates a calling sequence for performing address resolutionin a scenario such as that illustrated in FIG. 6 for an Internettelephony application according to one embodiment of the presentinvention;

FIG. 12 illustrates a calling sequence for performing address resolutionin a scenario such as that illustrated in FIG. 4 for an applicationcomplying with the session initiation protocol according to oneembodiment of the present invention;

FIG. 13 illustrates a calling sequence for performing address resolutionin a scenario such as that illustrated in FIG. 6 for an applicationcomplying with the session initiation protocol according to oneembodiment of the present invention; and

FIG. 14 is an exemplary computer system programmed to perform one ormore of the special purpose functions of the present invention.

DESCRIPTION OF THE PREFERRED EMBODIMENTS

Referring now to the figures, wherein like reference numerals designateidentical or corresponding parts throughout the several views, and moreparticularly to FIG. 1, which is a block diagram of a system in whichtwo client nodes are communicating with one another through anapplication controlled by a separate server.

As shown in FIG. 1, the system includes a first client, client A 101,and a second client, client B 103. Client A 101 and client B 103 bothrepresent nodes on a network, for example, the Internet. Client A 101has a public address 102 on the network, and client B 103 has a publicaddress 104 on the same network. Client A 101 may communicate withclient B 103 through a link L101 as controlled by the application server105. The application server 105 provides the control for a particularapplication, such as an IP telephony application. The application servercommunicates with client A 101 through a link L102, and the applicationserver 105 communicates with client B 103 through a different link L103.The application server 105 coordinates the establishment of the linkL101 between client A 101 and client B 103. Once the link L101 isestablished, media packets may be exchanged in a communication sessionbetween client A 101 and client B 103.

FIG. 2 is a flow diagram illustrating a process through which anapplication server 105 determines whether client A 101 and/or client B103 are behind a network address translator (NAT). As shown in FIG. 2,the process begins at step S201 where a client 101, 103 sends theirinternal IP address and port to the application server 105. The processthen proceeds to step S202 where the application server 105 obtains theIP source address and port from the header of the message sent by theclient 101, 103 to the application server 105. The IP source address andport are automatically populated in compliance with the TCP/IP protocolby the node transmitting the packet. The process then proceeds to stepS203 where the application server 105 determines whether the internal IPaddress and port sent by the client 101, 103 matches the IP sourceaddress and port that the application server 105 extracted from theheader of the message originated by the client 101, 103. If it isdetermined that the internal IP address and port matches the IP sourceaddress and port from the message header (i.e., “Yes” at step S203), theprocess proceeds to step S204 where a determination is made that theclient 101, 103 sending the message to the application server 105 is notbehind a network address translator. Once this determination is made atstep 204 the process ends.

If, on the other hand, the application server 105 determines that theinternal IP address and port does not match the source address and portextracted from the header of the message sent by the client 101, 103(i.e., “No” at step S203), the process proceeds to step S205 where theapplication server 105 makes a determination that the client 101, 103 isbehind a network address translator. Once the application server 105 hasmade this determination at step S205, the process ends.

In one embodiment of the present invention each of the clients 101, 103participating in a communication session under the control of theapplication server 105 reports their internal IP address to theapplication server 105. Based on this information, the applicationserver 105 is able to perform the processing described in FIG. 2 todetermine which, if any, of the nodes involved in a particular sessionare behind a NAT.

In one embodiment of the present invention, clients periodically sendpackets out in order to prevent the external IP address and UDP portassigned to a particular client from being reassigned. The frequency ofthese “silence packets” depends on the particular NAT that the client isbehind, but typically, by sending a “silence packet” every 1 to 10seconds is sufficient to keep the connection active. As would beunderstood by one of ordinary skill in the art, if a connection weredropped, it is unlikely that a translation established for a newconnection would be the same as the translation for the droppedconnection.

FIG. 3 is a flow diagram illustrating a process through which theapplication server 105 determines which address resolution scenarioapplies for a particular session according to one embodiment of thepresent invention. As shown in FIG. 3, the process begins at step S301where the application server 105 makes a determination as to how many ofthe clients 101, 103 involved in a particular session are behind anetwork address translator. If it is determined that none of the clients101, 103 are behind a NAT (i.e., “0” at step S301), the process proceedsto step S302 where the application server 105 makes a determination thatno address resolution is necessary in order for the clients 101, 103 tocommunicate. Once this determination is made at step S302, the processends. In this scenario, client A 101 and client B 103 can communicatethrough their respective public addresses 102, 104.

If it is determined that one of the clients 101, 103 is behind a NAT,but the other client 101, 103 is not behind a NAT (i.e., “1” at stepS301), the process proceeds to step S303 where the application server105 makes a determination to apply case 1 address resolution. Once thisdetermination is made at step S303, the process ends.

If, on the other hand, it is determined that both clients 101, 103 arebehind a NAT (i.e., “2” at step S301), the process proceeds to step S304where the application server 105 makes a determination as to whetherboth clients 101, 103 are behind the same NAT. If it is determined atstep S304 that both clients 101, 103 are not behind the same NAT (i.e.,“No” at step S304), the process proceeds to step S305 where theapplication server 105 makes a determination to apply case 2 addressresolution. Once this determination is made at step S305, the processends. If, on the other hand, it is determined that both clients 101, 103are behind the same NAT (i.e., “Yes” at step S304), the process proceedsto step S306 where the application server 105 makes a determination toapply case 3 address resolution. Once this determination is made at stepS306, the process ends.

FIG. 4 is a block diagram of a system illustrating an example where case1 address resolution, as described in the context of the flow diagram ofFIG. 3, would be applied. As shown in FIG. 4, client A 101 is behind aNAT 402. Client B 103, on the other hand, is not behind a NAT. In thisscenario, client A 101 has a private address 401, which is a uniqueaddress for an internal network behind NAT A 402. In this example, allof the nodes of the network behind NAT A 402 share a single publicaddress 403. As messages are sent by client A 101 to nodes on the publicnetwork, for example, client B 103, the source address included in theheader of the packets of information will reflect the public address403, not the private address 401. As multiple clients behind NAT A 402communicate with the public network, the source of their respectivepackets of information will not be distinguishable by the source IPaddress included in the IP header of those packets. Accordingly, in thesituation illustrated in FIG. 4, while client A 101 will be able tocommunicate directly to client B 103 since client B 103 has only asingle, globally-unique public address 104, the same is not true withrespect to client B's 103 ability to communicate with client A 101.Because client A 101 shares a single public address 403 with each of thenodes connected to the network behind NAT A 402, client B 103 will beunable to determine a globally-unique address for client A 101 by thesource IP address included in packets received by client B 103 fromclient A 101.

FIG. 5 is a flow diagram describing a process through which addressresolution is performed in a situation such as that shown in FIG. 4according to one embodiment of the present invention. As describedabove, the scenario where only one of the two clients 101, 103 is behinda NAT 402, will be referred to as a case 1 situation. As shown in FIG.5, the process begins at step S501 where the application server 105sends a message to client B 103 alerting it to expect a special messagesent to it from client A 101 which is behind NAT A 402. The process thenproceeds to step S502 where the application server 105 sends a messageto client A 101 to begin sending the special message to client B 103.The process then proceeds to step S503 where client A 101 repeatedlysends the special message to client B 103 until receipt of that specialmessage by client B 103 is acknowledged to client A 101 via theapplication server 105.

Once client B 103 receives the special message from client A 101, clientB 103 will obtain the external address and port of client A 101 from themessage header of the special message. As discussed above, this externaladdress and port of client A 101 will correspond not to the privateaddress 401 of client A 101, but rather, to the public address 403 ofNAT A 402, and the particular port of NAT A 402 being accessed by clientA 101 for sending the special message. Once client B 103 has obtainedthis information, the process proceeds to step S505 where client B 103forwards the external address and port of client A 101 (i.e., the publicaddress of NAT A 402) to the application server 105. The process thenproceeds to step S506 where the application server 105 sends a messageto client A 101 acknowledging receipt of the special message by client B103. The process then proceeds to step S507 where the application server105 sends a message to client B 103 indicating which external addressand port of client A 101 should be addressed by client B 103 in order tocommunicate to client A 101 through NAT A 402. Once client B 103 hasbeen told which address and port of NAT A 402 through which tocommunicate, the process ends.

In one embodiment of the present invention, control messages sentbetween the application server 105 and the clients 101, 103 comply withthe transmission control protocol/Internet protocol (TCP/IP), while thespecial message sent from one client (e.g., client A 101) to anotherclient (e.g., client B 103), as well as the messages sent during thecommunication session between the clients following the addressresolution processing, comply with the user datagram protocol (UDP).

FIG. 6 is a block diagram of a system illustrating a scenario describedin the context of flow diagram FIG. 3 as one in which case 2 addressresolution applies. As shown in FIG. 6, client A 101 is behind NAT A602, while client B 103 is behind NAT B 605, which is a different NATthan NAT A 602. Because client A 101 and client B 103 are behinddifferent NATs 602, 605, client A 101 is unable to determine aglobally-unique address for client B 103, and client B 103 is unable todetermine a globally-unique address for client A 101. Client A 101 isknown to the public network as the public address 603 of NAT A 602.Client B 103 is known to the public network as the public address 604 ofNAT B 605.

FIGS. 7A-7C are a flow diagram describing a process through which case 2address resolution is accomplished according to one embodiment of thepresent invention. As shown in FIGS. 7A-7C, the application server 105communicates with client A 101 and client B 103 in parallel so thataddress resolution in both directions may be accomplished. The processwill be described herein in the context of steps S701-S713. StepsS701-S713 correspond to the processing performed between the applicationserver 105 and client A 101. As discussed above, steps S714-S726,through which the application server 105 coordinates with client B 103,are processed in parallel with steps S701-S713.

The process begins at step S701 where the application server 105 sends amessage to client A 101 behind NAT A 602 telling client A 101 to beginsending a first special message to a first address and port of theapplication server 105 that is not behind a NAT. The process thenproceeds to step S702 where client A 101 sends a first special messageto the address and port identified by the application server 105. Theprocess then proceeds to step S703 where the application server 105determines whether the first special message has been received by theapplication server 105 from client A 101. If the first special messagehas not been received by the application server 105 (i.e., “No” at stepS703), the process proceeds to step S704 where client A 101 continues toresend the first special message at step S702. If, on the other hand,the first special message has been received by the application server105 from client A 101 (i.e., “Yes” at step S703), the process proceedsto step S705 where the application server 105 obtains the externaladdress and port of client A 101 from the message header of the firstspecial message, which will correspond to the public address 603 of NATA 602 used to send the first special message.

The process then proceeds to step S706 where the application server 105sends a message to client A 101 to begin sending a second specialmessage to a second address and port of the application server 105 thatis not behind a NAT. The second address and port are different from theaddress and port specified for the first special message. The processthen proceeds to step S707 where client A 101 sends the second specialmessage to the second address and port of the application server 105.The process then proceeds to step S708 where it is determined whetherthe second special message has been received by the application server105. If it is determined that the second special message has not beenreceived by the application server 105 (i.e., “No” at step S708), theprocess proceeds to step S709 wherein client A 101 continues to resendthe second special message to the application server 105 until it isreceived. If it is determined that the application server 105 hasreceived the second special message (i.e., “Yes” at step S708), theprocess proceeds to step S710 where the application server 105 obtainsthe external address and port of client A 101 from the message header ofthe second special message, which will correspond to the public address603 of NAT A 602 used to send the second special message.

The process then proceeds to step S711 where the application server 105determines whether the external address and port received with the firstspecial message (i.e., extracted from the message header of the firstspecial message) from client A 101 is the same external address and portas that received with the second special message (i.e., extracted fromthe message header of the second special message) sent by client A 101.This check is performed by the application server 105 in order todetermine whether the NAT A 602 is translating addresses based on thedestination of the messages as sent by client A 101. In one embodimentof the present invention, when the application server 105 determinesthat the external address and port of client A 101 does not change basedon the destination of the message, the application server 105 assumesthat when client A 101 sends messages to client B 103, that the sameexternal address and port (i.e., the same external address and port aswas used to send the first special message and the second specialmessage) will be used during the communication session.

If it is determined that the external address and port received with thefirst special message is the same as the external address and portreceived with the second special message (i.e., “Yes” at step S711), theprocess proceeds to step S712 where the application server 105 sends amessage to client B 103 indicating the external address and port ofclient A 101 (i.e., the same external address and port through which thefirst special message and the second special message were sent) throughwhich communication from client B 103 to client A 101 may be achieved.Once this message has been sent from the application server 105 toclient B 103, the process ends.

If, on the other hand, it is determined by the application server 105that the external address and port received with the first specialmessage (i.e., extracted from the message header of the first specialmessage) is not the same as the external address and port received withthe second special message (i.e., extracted from the message header ofthe second special message), (i.e., “No” at step S711), the processproceeds to step S713 where it is determined that the application server105 is unable to resolve an external address and port of client A 101for use by client B 103. Once this determination is made at step S713the process ends, and a communication session between client A 101 andclient B 103 is not attempted.

As discussed above, the process described in the context of FIGS. 7A and7B with respect to the coordination between the application server 105and client A 101, is performed in parallel between the applicationserver 105 and client B 103, and is described in the context of FIGS. 7Aand 7C.

FIG. 8 is a block diagram of a system illustrating a scenario describedin the context of flow diagram FIG. 3 as one in which case 3 addressresolution applies. As shown in FIG. 8, client A 101 is behind NAT A802,and client B 103 is also behind NAT A805. In this example, the privateaddress 801 of client A 101 is accessible to client B 103, and, theprivate address 804 of client B 103 is accessible to client A 101.

FIG. 9 is a flow diagram describing a process through which case 3address resolution is accomplished according to one embodiment of thepresent invention. As shown in FIG. 9, the process begins at step S901where the application server 105 sends a message to client B 103 behindNAT A 802 indicating the private address 801 of client A 101 that isbehind the same NAT. In parallel with step S901, is step S902 where theapplication server 105 sends a message to client A 101 behind NAT A 802indicating the private address 804 of client B 103, that is also behindNAT A802. Once these two private addresses have been exchanged via theapplication server 105, the process ends. In this situation, client A101 and client B 103 communicate via their private network without goingthrough NAT A 802, thereby alleviating the need for address resolution.

In each of the scenarios described above, the address resolution iscontrolled by a third party. There are several advantages to thisapproach, as recognized by the inventors of the present invention. Forexample, in one embodiment of the present invention, the applicationserver 105 controls the transfer of a call without the need to re-invokethe address resolution protocol described above. In this embodiment, theapplication server 105 retains the address resolution information. Whena transfer of a call is to be performed, the application server 105provides the new client with the address resolution information requiredfor communicating with the client remaining from the original call,without the need to invoke the protocol again.

A security advantage that is realized by performing address resolutionthrough a third party, as recognized by the present inventors, is thatit becomes more difficult to “steal” a media session as compared to anapproach where the clients simply send packets back to where they camefrom. By using the application server 105 to determine explicit IPaddresses and ports for the clients to communicate through, the risk oftheft is lessened.

FIGS. 10 and 11 illustrate one exemplary implementation of a protocolfor performing address resolution according to one embodiment of thepresent invention. This embodiment is described in the context of avoice over IP application. Table 1, below, includes the various messageformats and their corresponding descriptions for implementing NATaddress resolution in this exemplary application.

TABLE 1 Message Formats Used in an Exemplary Embodiment mapsend_m <id><ipaddr> <udpport> This TCP message is sent from call controller to NATclient/gateway to initiate the mapvoice_[qr] protocol. Theclient/gateway should send a mapvoice_q UDP message to thegateway/client at the IP address and port specified in the arguments<ipaddr> and <udpport> until a mapvoice_r message is received. Failureto receive a mapvoice_r message after a short period of time should betreated as a timeout and the call should be terminated. The argument<id> is unique identifier that is used in all the messages. mapsend2_m<id> <ipaddr> <udpport> This TCP message is sent from the callcontroller to NAT client to initiate the mapvoice_[qr] protocol, if theclients are behind different NATs (or RTP headers are being used). Ifthis case, the arguments <ipaddr> and <port> will be an IP address andUDP port that is read by the call controller. This message should beprocessed the same as mapsend_m except the mapvoice_q messages should besent repeatedly at a longer interval (about 1 second) so that the callcontroller is not inundated with messages. maprecv_m <id> This TCPmessage is sent from call controller to non-NAT client/ gateway toinitiate the mapvoice_[qr] protocol. The client/gateway should expect toreceive a mapvoice_q message with a matching <id> argument. mapvoice_q<id> This UDP message sent from NAT client/gateway to non-NATclient/gateway to map voice correctly. Since the client/gateway isexpecting binary UDP messages, if the process was initiated with amapsend_m message, a four-byte header must be inserted before the SOM({circumflex over ( )}) character. The second byte must be 0x4 toindicate that the packet contains an ASCII message. The other bytes inthe header can be arbitrary values. mapvoice_r <id> <ipaddr> <udpport>This TCP message is sent from non-NAT client/gateway to the callcontroller. The call controller forwards this message to the NATclient/gateway. The <ipaddr> and <udpport> arguments are theaddress/port where the mapvoice_q message was received (i.e. theexternal address of the NAT client). This message terminates the UDPaddress resolution protocol. vroute_q <arg1> <arg2> <arg3> <sendaddr><sendport> <recvaddr> <recvport> <parm> This message is sent when thecall is transferred to a different gateway server (e.g., forconferencing or leaving voice mail). The fields <sendaddr> and<sendport> are the IP address and UDP port where the voice data shouldbe sent. If <sendport> is 0, the client should stop sending voicepackets until a new port is provided. The fields <recvaddr> and<recvport> are the IP address and UDP port from where the voice datawill be received. If <recvport> is 0, the client should discard anyvoice packets until a new port is provided. The fields <arg1>, <arg2>,and <arg3> are not used by the client and should be returned in theresponse vroute_r message. The field <parm> is provided for future use.vroute_r <arg1> <arg2> <arg3> <status> <parm> This message is sent bythe client in response to receipt of a vroute_q message. The fields<arg1>, <arg2>, and <arg3> are copied from the vroute_q message. Thestatus should be 0 to acknowledge acceptance of the request, and 1 ifthe request is rejected. The <parm> field is for future use.

The inventors of the present invention have recognized that it would beadvantageous if an address resolution protocol was protocol independent.Accordingly, the address resolution protocol described herein can beused with any protocol so long as the clients are able to distinguishaddress resolution packets from media packets.

FIG. 10 illustrates an exemplary calling sequence for implementing acase 1 NAT address resolution for a voice-over-IP application accordingto one embodiment of the present invention. As shown in FIG. 10, clientA 1004 is behind a NAT 1003, while client B (gateway) 1002 is not behindNAT. The call controller 1001 corresponds to the application server 105.The example shown in FIG. 10 corresponds to a PC-to-phone situationwhere client A 1004 is a PC behind a NAT 1003, and client B 1002 isreferred to as a gateway connected to the phone network. For PC-to-phonecalls, the gateway is not behind a NAT, and therefore, only case 1address resolution, as described above, is applicable. If both clientsare PCs (i.e., PC-to-PC calls), then all of the cases (i.e., case 1,case 2, and case 3) described above could apply.

Prior to address resolution being performed, the call controller 1001determines if the calling client is behind a NAT device. The callcontroller 1001 uses the IP addresses provided in initiation messagessent to the call controller 1001 by the clients 1004, 1002, as well asthe IP addresses included in the message headers of those initiationmessages to determine if one or more clients are behind a NAT. Once itis determined that a client (e.g., client A 1004) is behind a NAT (e.g.,NAT 1003), as shown in FIG. 10, the call controller 1001 sends amaprecv_m message to client B 1002 telling client B 1002 to expect amapvoice_q message having an identifier that matches an identifierincluded in the maprecv_m message. Next, the call controller 1001 sendsa mapsend_m message to client A 1004 via the NAT 1003 telling client A1004 to start sending mapvoice_q messages to the IP address and portincluded in the mapsend_m message. In response, client A 1004 beginssending mapvoice_q messages to client B 1002. Once the mapvoice_qmessage is received by client B 1002, client B 1002 sends a mapvoice_rmessage to the call controller 1001 including the IP address and portfrom the header of mapvoice_q message. The IP address and port willcorrespond to the external address of the NAT 1003. The call controller1001 forwards this mapvoice_r message to client A 1004 through the NAT1003. Finally, the call controller 1001 will send the external IPaddress and port of client A 1004 to client B 1002 via a vroute_qmessage. The vroute_q message indicates which IP address and portthrough which client B 1002 should communicate to client A 1004. In oneembodiment of the present invention, the vroute_q message received byclient B 1002 is acknowledged by responding with a vroute_r message (notshown in FIG. 10).

FIG. 11 illustrates a sequence of messages sent in implementing a case 2address resolution in a voice-over-IP application where client A 1102and client B 1104 are behind different NATs according to one embodimentof the present invention. As shown in FIG. 11, the call controller 1101sends a mapsend2_m message to client A 1102 through a first NAT 1103telling client A 1102 to start sending mapvoice_q messages to a first IPaddress and port of the call controller 1101. The protocol beingdescribed herein in the context of the control between the callcontroller 1101 and client A 1102 is followed in parallel between thecall controller 1101 and client B 1104 through the second NAT 1105. Forclarity, the message flow between the call controller 1101 and client B1104 has not been shown in FIG. 11, and that message traffic will not bedescribed herein.

Next, client A 1102 begins sending mapvoice_q messages to theappropriate IP address and port of the controller 1101. Once themapvoice_q message is received by the call controller 1101, the callcontroller 1101 sends a mapvoice_r message to client A 1102 tellingclient A 1102 to stop sending mapvoice_q messages. Next, the callcontroller 1101 sends a mapsend2_m message to client A telling client Ato send mapvoice_q messages to a second IP address and port of the callcontroller 1101. Once client A 1102 receives the mapsend2_m message,client A 1102 begins sending mapvoice_q messages to the call controller1101. Again, once the call controller 1101 receives the mapvoice_qmessage from client A 1102, the call controller 1101 sends a mapvoice_rmessage to client A 1102 telling it to stop sending mapvoice_q messages.Once the call controller 1101 has received the two mapvoice_q messagesfrom client A on different IP address and ports, the call controller1101 can make a determination as to whether the first NAT 1103translates addresses based on the destination of the message. If it isdetermined that the first NAT 1103 does not change the addresstranslation based on the destination of the message, the call controller1101 assumes that the external IP address and port of client A will bethe same external IP address and port when communicating with client B1104 as it was when communicating with the call controller 1101.Accordingly, the call controller 1101 will then send a vroute_q messageto client B 1104 indicating the external IP address and port of client A1102 through which client B 1104 should communicate with client A 1102.In one embodiment of the present invention, the vroute_q messagereceived by client B 1104 is acknowledged by responding with a vroute_rmessage (not shown in FIG. 11). Again, as discussed above, in a case 2scenario such as that shown in FIG. 11, the processing performed forclient A 1102 by the call controller 1101 is performed in parallel forclient B 1104 by the call controller 1101 so that appropriate IP addressand port information may be exchanged between the two clients.

FIG. 12 is a diagram showing a calling sequence for performing NATaddress resolution in a session initiation protocol (SIP) applicationaccording to one embodiment of the present invention. SIP is used toestablish, change, and tear-down calls between two or more endpoints inan IP-based network. SIP is a textual client-server protocol, withrequests issued by the client and responses returned by the server. SIPis similar to the hypertext transfer protocol (HTTP) with respect to itsresponse code architecture, message headers, and its overall operation.SIP is used for IP telephony functions by mapping each function to oneor more transactions. An SIP transaction consists of a single requestissued by a client, and one or more responses returned by one or moreservers. Each SIP request is an attempt to invoke a method on theserver. RFC 2543 describes six SIP methods, and is available through theIETF website (www.ietf.org). The entire contents of RFC 2543 isincorporated herein by reference. The most basic of these methods is theINVITE method, which is used to initiate a call between a client and aserver.

SIP incorporates the following protocols: RSVP for reserving networkresources as described in RFC 2205; the real-time transport protocolRTP) for transporting real-time data and providing quality of service(QOS) feedback as described in RFC 1889; the real-time streamingprotocol (RTSP) for controlling delivery of streaming media as describedin RFC 2326; the session announcement protocol (SAP) for advertisingmultimedia sessions via multicast as described in RFC 2974; and thesession description protocol (SDP) for describing multimedia sessions asdescribed in RFC 2327, the entire contents of each of these five RFCsbeing incorporated herein by reference.

As shown in FIG. 12, the SIP application server 1201 is responsible forcontrolling the NAT address resolution. The SIP application server 1201corresponds to the application server and the call controller describedabove. The SIP application server 1201 determines which SIP clients arebehind a NAT in order to determine the proper address resolution toperform. In the example shown in FIG. 12, SIP client A 1202 is behind aNAT 1203, whereas SIP GATEWAY B 1204 is not behind a NAT. SIP client A1202 must provide its internal IP address from which it is sending theSIP message in order for the SIP application server 1201 to correctlydetermine whether the SIP client is behind a NAT.

In one embodiment of the present invention, SIP client A 1202 providesits internal IP address by placing it in a new header (e.g., a“Via-From” header similar to the “Via” header) in the SIP INVITEmessage. Since SIP messages can pass through many other servers beforereaching their destination, any SIP Proxy along the path should alsoinsert a “Via-Receive” header including the IP address from which themessage was received in case that SIP Proxy server is behind a NAT.

Alternately, SIP client A 1202 could insert another new header (e.g.,“NAT-Protocol: true”) in order to force an invocation of the NATresolution protocol if SIP client A 1202 knows it is behind a NATthrough, for example, an external method such as provisioning. Theseexemplary methods do not require that changes be made to existing SIPProxy servers in order to support the new headers (e.g., a “Via-From”header and a “Via-Receive” header) since SIP Proxy servers are requiredto pass on all headers.

The protocol begins by SIP client A 1202 sending an INVITE/SDP requestto the SIP application server 1201. The SIP application serverdetermines the location of SIP GATEWAY B 1204, for example, through theuse of a location server, and forwards the INVITE request to SIP GATEWAYB 1204. SIP GATEWAY B 1204 responds to the SIP application server 1201with a message including information as to whether the SIP GATEWAY B1204 can support the NAT protocol on the RTP stream. If SIP GATEWAY B1204 is unable to support the NAT protocol on the RTP stream, the SIPapplication server 1201 will implement NAT address resolution accordingto a case 2 scenario, described below in the context of FIG. 13.

After SIP GATEWAY B 1204 has responded to the SIP application server1201, the SIP application server 1201 sends an INFO message with NATcontent to SIP client A 1202. In one embodiment of the presentinvention, the SDP parameters are used to set a dynamic NAT payload typeand an IP address and port indicating where the RTP message is to besent. SIP client A 1202 then sends an RTP message with the NAT payloadtype to SIP GATEWAY B 1204, for example, every one second, until an INFOresponse message is received from the SIP application server 1201. Inone embodiment of the present invention, a failure to receive an INFOmessage after a short period of time is treated as a timeout, and thecall is terminated. Once SIP GATEWAY B 1204 receives the RTP message,SIP GATEWAY B 1204 sends an INFO/NAT response message to the SIPapplication server 1201. The INFO/NAT message contains the external IPaddress and UDP port of SIP client A 1202 as received in the RTPmessage. The SIP application server 1201 forwards this message to SIPclient A, causing SIP client A, to stop sending the special RIP packetsto SIP GATEWAY B 1204.

The SIP application server 1201 then sends a reINVITE message to SIPGATEWAY B 1204 containing the external IP address and UDP port to whichit should send its voice data in the modified SDP content. Next, the SIPGATEWAY B 1204 sends another response to the SIP application server 1201with SDP content. The SIP application server 1201 will pass this messageonto SIP client A 1202.

FIG. 13 is a diagram illustrating a calling sequence for performing NATaddress resolution in a SIP protocol application where both SIP clientsare behind different NATs (i.e., case 2 address resolution) according toone embodiment of the present invention. As shown in FIG. 13, theprotocol begins with SIP client A 1302 sending an INVITE request to theSIP application server 1301. The SIP application server 1301 thendetermines the location of SIP client B 1304, for example, through theuse of a location server, and forwards the received INVITE request toSIP client B 1304, stripping off any SDP content from the request. Next,SIP client B 1304 sends a response to the SIP application server 1301including SDP content. The SIP application server 1301 will pass thatmessage on. Next, the SIP application server 1301 sends an INFO messagewith NAT content to both SIP client A 1302 and SIP client B 1304.

Both SIP client A 1302 and SIP client B 1304 will send an RTP message tothe SIP application server 1301, for example, every one second, until anINFO/NAT response message is received from the SIP application server1301. In one embodiment of the present invention, if either SIP client A1302 or SIP client B 1304 do not receive an INFO message after a shortperiod of time, it is treated as a timeout, and the call is terminated.

The SIP application server 1301 sends an INFO/NAT response message toboth SIP client A 1302 and SIP client B 1304. The INFO/NAT responsemessage will include the external IP address and UDP port of SIP clientA 1302 and SIP client B 1304 respectively, as received in thecorresponding RTP messages. Once the INFO/NAT response message isreceived by SIP client A 1302 and SIP client B 1304, the clients willstop sending the special RTP packets to the SIP application server 1301.The SIP application server 1301 will then send a reINVITE message to SIPclient B 1304 including the external IP address and UDP port to which itshould send its voice data and the modified SDP content section. SIPclient B 1304 then sends another response to the SIP application server1301 with SDP content. The SIP application server 1301 modifies the IPaddress and UDP port contents of the SDP content section and passes iton to SIP client A 1302.

In one embodiment of the present invention, if it were determined in anSIP application that both client A and client B were behind the sameNAT, the SIP application server would simply send the INVITE messagereceived from client A to client B without modification, since client Awould have naturally provided their internal IP address in the SDPcontent section.

FIG. 14 illustrates a computer system 1401 upon which an embodiment ofthe present invention may be implemented. The computer system 1401includes a bus 1402 or other communication mechanism for communicatinginformation, and a processor 1403 coupled with the bus 1402 forprocessing the information. The computer system 1401 also includes amain memory 1404, such as a random access memory (RAM) or other dynamicstorage device (e.g., dynamic RAM (DRAM), static RAM (SRAM), andsynchronous DRAM (SDRAM)), coupled to the bus 1402 for storinginformation and instructions to be executed by processor 1403. Inaddition, the main memory 1404 may be used for storing temporaryvariables or other intermediate information during the execution ofinstructions by the processor 1403. The computer system 1401 furtherincludes a read only memory (ROM) 1405 or other static storage device(e.g., programmable ROM (PROM), erasable PROM (EPROM), and electricallyerasable PROM (EEPROM)) coupled to the bus 1402 for storing staticinformation and instructions for the processor 1403.

The computer system 1401 also includes a disk controller 1406 coupled tothe bus 1402 to control one or more storage devices for storinginformation and instructions, such as a magnetic hard disk 1407, and aremovable media drive 1408 (e.g., floppy disk drive, read-only compactdisc drive, read/write compact disc drive, compact disc jukebox, tapedrive, and removable magneto-optical drive). The storage devices may beadded to the computer system 1401 using an appropriate device interface(e.g., small computer system interface (SCSI), integrated deviceelectronics (IDE), enhanced-IDE (E-IDE), direct memory access (DMA), orultra-DMA).

The computer system 1401 may also include special purpose logic devices(e.g., application specific integrated circuits (ASICs)) or configurablelogic devices (e.g., simple programmable logic devices (SPLDs), complexprogrammable logic devices (CPLDs), and field programmable gate arrays(FPGAs)).

The computer system 1401 may also include a display controller 1409coupled to the bus 1402 to control a display 1410, such as a cathode raytube (CRT), for displaying information to a computer user. The computersystem includes input devices, such as a keyboard 1411 and a pointingdevice 1412, for interacting with a computer user and providinginformation to the processor 1403. The pointing device 1412, forexample, may be a mouse, a trackball, or a pointing stick forcommunicating direction information and command selections to theprocessor 1403 and for controlling cursor movement on the display 1410.In addition, a printer may provide printed listings of data storedand/or generated by the computer system 1401.

The computer system 1401 performs a portion or all of the processingsteps of the invention in response to the processor 1403 executing oneor more sequences of one or more instructions contained in a memory,such as the main memory 1404. Such instructions may be read into themain memory 1404 from another computer readable medium, such as a harddisk 1407 or a removable media drive 1408. One or more processors in amulti-processing arrangement may also be employed to execute thesequences of instructions contained in main memory 1404. In alternativeembodiments, hard-wired circuitry may be used in place of or incombination with software instructions. Thus, embodiments are notlimited to any specific combination of hardware circuitry and software.

As stated above, the computer system 1401 includes at least one computerreadable medium or memory for holding instructions programmed accordingto the teachings of the invention and for containing data structures,tables, records, or other data described herein. Examples of computerreadable media are compact discs, hard disks, floppy disks, tape,magneto-optical disks, PROMs (EPROM, EEPROM, flash EPROM), DRAM, SRAM,SDRAM, or any other magnetic medium, compact discs (e.g., CD-ROM), orany other optical medium, punch cards, paper tape, or other physicalmedium with patterns of holes, a carrier wave (described below), or anyother medium from which a computer can read.

Stored on any one or on a combination of computer readable media, thepresent invention includes software for controlling the computer system1401, for driving a device or devices for implementing the invention,and for enabling the computer system 1401 to interact with a human user(e.g., print production personnel). Such software may include, but isnot limited to, device drivers, operating systems, development tools,and applications software. Such computer readable media further includesthe computer program product of the present invention for performing allor a portion (if processing is distributed) of the processing performedin implementing the invention.

The computer code devices of the present invention may be anyinterpretable or executable code mechanism, including but not limited toscripts, interpretable programs, dynamic link libraries (DLLs), Javaclasses, and complete executable programs. Moreover, parts of theprocessing of the present invention may be distributed for betterperformance, reliability, and/or cost.

The term “computer readable medium” as used herein refers to any mediumthat participates in providing instructions to the processor 1403 forexecution. A computer readable medium may take many forms, including butnot limited to, non-volatile media, volatile media, and transmissionmedia. Non-volatile media includes, for example, optical, magneticdisks, and magneto-optical disks, such as the hard disk 1407 or theremovable media drive 1408. Volatile media includes dynamic memory, suchas the main memory 1404. Transmission media includes coaxial cables,copper wire and fiber optics, including the wires that make up the bus1402. Transmission media also may also take the form of acoustic orlight waves, such as those generated during radio wave and infrared datacommunications.

Various forms of computer readable media may be involved in carrying outone or more sequences of one or more instructions to processor 1403 forexecution. For example, the instructions may initially be carried on amagnetic disk of a remote computer. The remote computer can load theinstructions for implementing all or a portion of the present inventionremotely into a dynamic memory and send the instructions over atelephone line using a modem. A modem local to the computer system 1401may receive the data on the telephone line and use an infraredtransmitter to convert the data to an infrared signal. An infrareddetector coupled to the bus 1402 can receive the data carried in theinfrared signal and place the data on the bus 1402. The bus 1402 carriesthe data to the main memory 1404, from which the processor 1403retrieves and executes the instructions. The instructions received bythe main memory 1404 may optionally be stored on storage device 1407 or1408 either before or after execution by processor 1403.

The computer system 1401 also includes a communication interface 1413coupled to the bus 1402. The communication interface 1413 provides atwo-way data communication coupling to a network link 1414 that isconnected to, for example, a local area network (LAN) 1415, or toanother communications network 1416 such as the Internet. For example,the communication interface 1413 may be a network interface card toattach to any packet switched LAN. As another example, the communicationinterface 1413 may be an asymmetrical digital subscriber line (ADSL)card, an integrated services digital network (ISDN) card or a modem toprovide a data communication connection to a corresponding type ofcommunications line. Wireless links may also be implemented. In any suchimplementation, the communication interface 1413 sends and receiveselectrical, electromagnetic or optical signals that carry digital datastreams representing various types of information.

The network link 1414 typically provides data communication through oneor more networks to other data devices. For example, the network link1414 may provide a connection to another computer through a localnetwork 1415 (e.g., a LAN) or through equipment operated by a serviceprovider, which provides communication services through a communicationsnetwork 1416. In preferred embodiments, the local network 1414 and thecommunications network 1416 preferably use electrical, electromagnetic,or optical signals that carry digital data streams. The signals throughthe various networks and the signals on the network link 1414 andthrough the communication interface 1413, which carry the digital datato and from the computer system 1401, are exemplary forms of carrierwaves transporting the information. The computer system 1401 cantransmit and receive data, including program code, through thenetwork(s) 1415 and 1416, the network link 1414 and the communicationinterface 1413. Moreover, the network link 1414 may provide a connectionthrough a LAN 1415 to a mobile device 1417 such as a personal digitalassistant (PDA) laptop computer, or cellular telephone. The LANcommunications network 1415 and the communications network 1416 both useelectrical, electromagnetic or optical signals that carry digital datastreams. The signals through the various networks and the signals on thenetwork link 1414 and through the communication interface 1413, whichcarry the digital data to and from the system 1401, are exemplary formsof carrier waves transporting the information. The processor system 1401can transmit notifications and receive data, including program code,through the network(s), the network link 1414 and the communicationinterface 1413.

Obviously, numerous modifications and variations of the presentinvention are possible in light of the above teachings. It is thereforeto be understood that within the scope of the appended claims, theinvention may be practiced otherwise than as specifically describedherein.

1. A computer implemented method for performing address resolution,comprising the steps of: sending a first message by a controller to afirst node causing the first node to listen for a special message from asecond node, the first node not being behind a network addresstranslator, and the second node being behind a network addresstranslator; sending a second message by the controller to the secondnode, the second message telling the second node to send the specialmessage to the first node; sending the special message by the secondnode to the first node; determining by the first node an externaladdress of the second node based on information received by the firstnode with the special message; sending a third message by the first nodeto the controller, the third message including the external address ofthe second node; and sending a fourth message by the controller to thefirst node, the fourth message including a communication address of thesecond node, the communication address being the external address of thesecond node.
 2. The method of claim 1, further comprising the step of:determining by the controller that the first node is not behind anetwork address translator, and that the second node is behind a networkaddress translator.
 3. The method of claim 2, wherein the determiningstep comprises: receiving by the controller a first address message fromthe first node, the first address message including a first internaladdress corresponding to the first node; receiving by the controller asecond address message from the second node, the second address messageincluding a second internal address corresponding to the second node;comparing by the controller the first internal address with a firstsource address included with the first address message, and the secondinternal address with a second source address included with the secondaddress message; and determining by the controller based on a result ofthe comparing step that the first node is not behind a network addresstranslator, and that the second node is behind a network addresstranslator.
 4. The method of claim 1, further comprising the step of:forwarding by the controller the third message to the second node,wherein the sending the special message step comprises repeatedlysending the special message by the second node until the second nodereceives the third message forwarded by the controller in the forwardingstep.
 5. The method of claim 4, wherein the first message, the secondmessage, the special message, the third message and the fourth messagecomprise Internet protocol messages.
 6. The method of claim 5, wherein:the first message, the second message, the third message, and the fourthmessage comprise transmission control protocol/Internet protocolmessages, and the special message comprises a user datagramprotocol/Internet protocol message.
 7. The method of claim 1, whereinthe first message, the second message, the special message, the thirdmessage and the fourth message comprise Internet protocol messages. 8.The method of claim 7, wherein: the first message, the second message,the third message, and the fourth message comprise transmission controlprotocol/Internet protocol messages, and the special message comprises auser datagram protocol/Internet protocol message.
 9. The method of claim1, wherein the external address of the second node comprises an Internetprotocol address and a user datagram protocol port.
 10. The method ofclaim 1, wherein the controller is a process independent of the firstnode and the second node.
 11. A system for performing addressresolution, comprising: means for sending a first message by acontroller to a first node causing the first node to listen for aspecial message from a second node, the first node not being behind anetwork address translator, and the second node being behind a networkaddress translator; means for sending a second message by the controllerto the second node, the second message telling the second node to sendthe special message to the first node; means for sending the specialmessage by the second node to the first node; means for determining bythe first node an external address of the second node based oninformation received by the first node with the special message; meansfor sending a third message by the first node to the controller, thethird message including the external address of the second node; andmeans for sending a fourth message by the controller to the first node,the fourth message including a communication address of the second node,the communication address being the external address of the second node.12. The system of claim 11, further comprising: means for determining bythe controller that the first node is not behind a network addresstranslator, and that the second node is behind a network addresstranslator.
 13. A device for coordinating network address translation,comprising a processor; and a non-transitory computer readable mediumencoded with processor readable instructions that when executed by theprocessor implement a network address translator detection mechanismconfigured to determine that a second node is behind a network addresstranslator and an address resolution mechanism configured to determinean external address for the second node and to provide the externaladdress to a first node, the address resolution mechanism controllingthe processor to perform the steps of: sending a first message to thefirst node causing the first node to listen for a special message fromthe second node, the first node not being behind a network addresstranslator, and the second node being behind a network addresstranslator; sending a second message to the second node, the secondmessage telling the second node to send the special message to the firstnode; receiving a third message from the first node, the third messageincluding an external address of the second node determined by the firstnode based on information received by the first node with the specialmessage; and sending a fourth message to the first node, the fourthmessage including a communication address of the second node, thecommunication address being the external address of the second node. 14.The device of claim 13, wherein the external address comprises anInternet protocol address and a user datagram protocol port.
 15. Thedevice as claimed in claim 13, wherein the address resolution mechanismfurther performs the step of forwarding the third message to the secondnode to indicate that the second node should stop repeatedly sending thespecial message to the first node.
 16. The device as claimed in claim15, wherein the address resolution mechanism further performs the stepof determining that the first node is not behind a network addresstranslator, and the second node is behind a network address translator.17. The device as claimed in claim 15, wherein the external addresscomprises an Internet protocol address and a port number.
 18. The deviceas claimed in claim 16, wherein the external address comprises anInternet protocol address and a port number.
 19. A computer programproduct, comprising: a non-transitory computer storage medium; and acomputer program code mechanism embedded in the computer storage mediumfor causing a computer to coordinate network address translation betweena first node and a second node in a communication session, the computerprogram code mechanism having a first computer code device configured todetermine that the second node is behind a network address translator,and a second computer code device configured to determine an externaladdress for the second node and to provide the external address to thefirst node by performing the steps of: sending a first message to thefirst node causing the first node to listen for a special message fromthe second node, the first node not being behind a network addresstranslator, and the second node being behind a network addresstranslator; sending a second message to the second node, the secondmessage telling the second node to send the special message to the firstnode; receiving a third message from the first node, the third messageincluding an external address of the second node determined by the firstnode based on information received by the first node with the specialmessage; and sending a fourth message to the first node, the fourthmessage including a communication address of the second node, thecommunication address being the external address of the second node. 20.The computer program product of claim 19, wherein the external addresscomprises an Internet protocol address and a user datagram protocolport.
 21. The computer program product claimed in claim 19, wherein thesecond computer code device further performs the step of forwarding thethird message to the second node to indicate that the second node shouldstop repeatedly sending the special message to the first node.
 22. Thecomputer program product as claimed in claim 21, wherein the addressresolution mechanism further performs the step of determining that thefirst node is not behind a network address translator, and the secondnode is behind a network address translator.
 23. The computer programproduct as claimed in claim 21, wherein the external address comprisesan Internet protocol address and a port number.
 24. The computer programproduct as claimed in claim 22, wherein the external address comprisesan Internet protocol address and a port number.